/*********************************************************************
*
*      Copyright (C) 2002 Andrew Khan
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
***************************************************************************/

package org.nokatag.jxl.write;

import java.io.File;
import java.net.URL;

import org.nokatag.jxl.Hyperlink;
import org.nokatag.jxl.write.biff.HyperlinkRecord;


/**
 * A writable hyperlink.  Provides API to modify the contents of the hyperlink
 */
public class WritableHyperlink extends HyperlinkRecord implements Hyperlink
{
  /**
   * Constructor used internally by the worksheet when making a copy
   * of worksheet
   *
   * @param h the hyperlink being read in
   * @param ws the writable sheet containing the hyperlink
   */
  public WritableHyperlink(Hyperlink h, WritableSheet ws)
  {
    super(h, ws);
  }

  /**
   * Constructs a URL hyperlink in a single cell
   *
   * @param col the column containing this hyperlink
   * @param row the row containing this hyperlink
   * @param url the hyperlink
   */
  public WritableHyperlink(int col, int row, URL url)
  {
    this(col, row, col, row, url);
  }

  /**
   * Constructs a url hyperlink to a range of cells
   *
   * @param col the column containing this hyperlink
   * @param row the row containing this hyperlink
   * @param lastcol the last column which activates this hyperlink
   * @param lastrow the last row which activates this hyperlink
   * @param url the hyperlink
   */
  public WritableHyperlink(int col, int row, int lastcol, int lastrow, URL url)
  {
    this(col, row, lastcol, lastrow, url, null);
  }

  /**
   * Constructs a url hyperlink to a range of cells
   *
   * @param col the column containing this hyperlink
   * @param row the row containing this hyperlink
   * @param lastcol the last column which activates this hyperlink
   * @param lastrow the last row which activates this hyperlink
   * @param url the hyperlink
   * @param desc the description text to place in the cell
   */
  public WritableHyperlink(int col,
                           int row,
                           int lastcol,
                           int lastrow,
                           URL url,
                           String desc)
  {
    super(col, row, lastcol, lastrow, url, desc);
  }

  /**
   * Constructs a file hyperlink in a single cell
   *
   * @param col the column containing this hyperlink
   * @param row the row containing this hyperlink
   * @param file the hyperlink
   */
  public WritableHyperlink(int col, int row, File file)
  {
    this(col, row, col, row, file, null);
  }

  /**
   * Constructs a file hyperlink in a single cell
   *
   * @param col the column containing this hyperlink
   * @param row the row containing this hyperlink
   * @param file the hyperlink
   * @param desc the hyperlink description
   */
  public WritableHyperlink(int col, int row, File file, String desc)
  {
    this(col, row, col, row, file, desc);
  }

  /**
   * Constructs a File hyperlink to a range of cells
   *
   * @param col the column containing this hyperlink
   * @param row the row containing this hyperlink
   * @param lastcol the last column which activates this hyperlink
   * @param lastrow the last row which activates this hyperlink
   * @param file the hyperlink
   */
  public WritableHyperlink(int col, int row, int lastcol, int lastrow,
                           File file)
  {
    super(col, row, lastcol, lastrow, file, null);
  }

  /**
   * Constructs a File hyperlink to a range of cells
   *
   * @param col the column containing this hyperlink
   * @param row the row containing this hyperlink
   * @param lastcol the last column which activates this hyperlink
   * @param lastrow the last row which activates this hyperlink
   * @param file the hyperlink
   * @param desc the description
   */
  public WritableHyperlink(int col,
                           int row,
                           int lastcol,
                           int lastrow,
                           File file,
                           String desc)
  {
    super(col, row, lastcol, lastrow, file, desc);
  }

  /**
   * Constructs a hyperlink to some cells within this workbook
   *
   * @param col the column containing this hyperlink
   * @param row the row containing this hyperlink
   * @param desc the cell contents for this hyperlink
   * @param sheet the sheet containing the cells to be linked to
   * @param destcol the column number of the first destination linked cell
   * @param destrow the row number of the first destination linked cell
   */
  public WritableHyperlink(int col, int row,
                           String desc,
                           WritableSheet sheet,
                           int destcol, int destrow)
  {
    this(col, row, col, row,
         desc,
         sheet, destcol, destrow, destcol, destrow);
  }

  /**
   * Constructs a hyperlink to some cells within this workbook
   *
   * @param col the column containing this hyperlink
   * @param row the row containing this hyperlink
   * @param lastcol the last column which activates this hyperlink
   * @param lastrow the last row which activates this hyperlink
   * @param desc the cell contents for this hyperlink
   * @param sheet the sheet containing the cells to be linked to
   * @param destcol the column number of the first destination linked cell
   * @param destrow the row number of the first destination linked cell
   * @param lastdestcol the column number of the last destination linked cell
   * @param lastdestrow the row number of the last destination linked cell
   */
  public WritableHyperlink(int col, int row,
                           int lastcol, int lastrow,
                           String desc,
                           WritableSheet sheet,
                           int destcol, int destrow,
                           int lastdestcol, int lastdestrow)
  {
    super(col, row, lastcol, lastrow,
          desc,
          sheet, destcol, destrow,
          lastdestcol, lastdestrow);
  }

  /**
   * Sets the URL of this hyperlink
   *
   * @param url the url
   */
  public void setURL(URL url)
  {
    super.setURL(url);
  }

  /**
   * Sets the file activated by this hyperlink
   *
   * @param file the file
   */
  public void setFile(File file)
  {
    super.setFile(file);
  }

  /**
   * Sets the description to appear in the hyperlink cell
   *
   * @param desc the description
   */
  public void setDescription(String desc)
  {
    super.setContents(desc);
  }

  /**
   * Sets the location of the cells to be linked to within this workbook
   *
   * @param desc the label describing the link
   * @param sheet the sheet containing the cells to be linked to
   * @param destcol the column number of the first destination linked cell
   * @param destrow the row number of the first destination linked cell
   * @param lastdestcol the column number of the last destination linked cell
   * @param lastdestrow the row number of the last destination linked cell
   */
  public void setLocation(String desc,
                          WritableSheet sheet,
                          int destcol, int destrow,
                          int lastdestcol, int lastdestrow)
  {
    super.setLocation(desc, sheet, destcol, destrow, lastdestcol, lastdestrow);
  }

}


